/*********************************************************************
 ****  描    述： <QinCom 通讯协意 身份认证  Authenticate  F1 逻辑的处理方法>
 ****  创 建 者： <周渊>
 ****  创建时间： <2014-04-09>
 ****  修改标识:  修改人: 
 ****  修改日期:  
 ****  修改内容:   
*********************************************************************/
using System;
using System.Collections.Generic;
using InCom.Entities.UnitEntities;
using InCom.Utilities;
using InCom.Utilities.Protocol;

namespace InCom.Core.Test.UdpUnitLogic
{
         /// <summary>
        ///   身份认证  F1数据单元的处理逻辑,处理方法
        /// </summary>
        public class  AuthenticateLogicF1Method : IUdpUnitLogic
    {
        private byte _afn = (byte)InCom.Utilities.Protocol.AFN.AUTHERTICATION;
        /// <summary >
        /// 对应协义的AFN
        /// </summary >
        public byte AFN
        {
            get { return _afn; }
            set { _afn = value; }
        }
        private ushort _fn =(ushort)InCom.Utilities.Protocol.FN.F1;
        /// <summary >
        /// FN,对应数据单元的FN
        /// </summary >
        public ushort FN
        {
            get { return _fn; }
            set { _fn = value; }
        }



        /// <summary >
        /// 返回当前处理类的版本号,越大越新
        /// </summary >
        public int Ver
        {
            get { return 0; }
        }
        /// <summary >
        /// 协义解析功能,此属性会在  ProtocolManager 文件初始化时自动实例化
        /// </summary >
        public IProtocolManager ProtocolManager{get;set; }

        /// <summary >
        /// 协义解析与转换器,此属性会自动实例化
        /// </summary >
        public IBaseUdpProtocolEntityMethod BaseUdpProtocolEntityMethod { get; set; }

        /// <summary >
        /// 用于传递操作上下文的字典,键为类名如:OnlineTerminalQueue,值为实例
        /// CommandAdapter,
        /// OnlineTerminalQueue,
        /// TerminalMessageRecord ,这些处理队列的数据实体
        ///示例: key="CommandAdapter",value=CommandAdapter.Create()
        /// </summary >
        public Dictionary<string, object > OperatrionContextDictionary
        {
            get; set;
        }

        /// <summary >
        /// 进行数据协义处理
        /// </summary >
        /// <param name="entity" >传入整个,消息数据体,这里为什么传入整个数据体而不是单个 数据单元,因为可能这个处理逻辑中会用到其它的数据处理单元中的消息数据</param >
        ///<param name="terminal" >当前终端数据实体</param >
        /// <param name="sourceEntity" >等待处理的数据对像</param >
        ///<returns >如果处理成功则返回 true</returns >
        public bool Process(BaseUdpProtocolEntity entity, TerminalEntity terminal, Utilities.Pool.WaitUdpProcessEntity sourceEntity)
        {

            IUnitEntity unitentity;
            //获取数据单元
            entity.UnitsDictionary.TryGetValue(FN, out unitentity);
            //数据单元没有找到直接返回 false
            if (unitentity == null)
            {
                return false;
            }
            //强制类型转换
            AuthenticateEntityF1 dataUnit = (AuthenticateEntityF1)unitentity;

            #region F1 的具体处理代码

            #endregion

            throw new NotImplementedException("没有实现方法,无法进行处理数据单元逻辑操作");

            //return true;
        }
    }
}


